639834 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

Linuxで無線LANしててし(^-^)

debian GNU/Linuxで無線LANしてしててし(^-^)

さてあんまり長くなったんでボツにしたメモですが、そのまんまにするのも何なんで端折って書いてみよう。まあそれでも長くなりそうで、あらかじめ
ごめんなさい。
(Googleで調べても案外WEPの暗号の設定あたりは情報が少なかったんで...誰かのお役にたてればいいなぁなどど妄想ぎみ)

まずは状況から
マシン中古なノートパソコンThinkPad 310E(ふふふペンティアムMMX166Mhzな旧式&どノーマルだぜぃ(+_+;;;)
OS Debian GNU/Linux 3.0r1("woody")
Linuxカーネル2.4.20 (debianのカーネルソースのパッケージじゃないものを自分でコンパイルして使ってました)
アクセスポイントPLANEX製GW-AP11S
PCMCIAなWirelessLANカードPLANEX製GW-NS11S
ASUSTek製WL-100...... この作業やってる時に近所のパーツ屋さんで3000円で並んでたんでつい購入。箱に対応OS Linuxって書いてあったのが大きかった。GW-NS11Sもまったく同じ方法で動きました。アンテナが大仰なせいかWL-100の方がリンククオリ ティが良いみたい)

多分両方共 Prism2 チップを使ってます。

ASUS WL-100で説明します(/etc/pcmcia/*.conf のカードの特定の以外は全部おんなじでGW-NS11Sも動きました)


### pcmcia-modules の orinoco_cs ドライバで一応動いたが... ###


まずは、まっとうに pcmcia-modulesのパッケージを使おうとしました。
が、普段使っているLinuxのカーネルがデビアンのパッケージにまだ無いやつなんで、当然対応するコンパイルずみのpcmcia-modulesは無い。
まずは pcmcia-source 3.1.33 のソースコードいれてモジュールをコンパイルして入れてみることに。
しかし、
/lib/modules/2.4.20/kernel/ 以下にカーネル付属のpcmciaモジュール
/lib/modules/2.4.20/pcmcia/ 以下にpcmcia-source のモジュール
がダブって入ってしまった。
むうカーネルコンフィグでなんとかできるんだろうが、面倒になってカーネル付属のモジュール消しました。(+_+;;; もちろんバックアップはとりましたが...。
それと
$ apt-get install wireless-tool
と打ってwireless-toolという無線LAN用のユーティリティをインストールしときました。
さて設定。

/etc/network/interfaces


auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.xxx.xxx
netmask 255.255.xxx.xxx
network 192.168.xxx.xxx
broadcast 192.168.xxx.xxx
gateway 192.168.xxx.xxx
インターフェースの名前とIPアドレスの割り当てを書いておく。
DHCPの場合もここにそれなりの設定をしておけば良かったはず。

/etc/pcmcia/wireless.opts
の無線LANの設定を編集します。


~前略~
# NOTE : Remove the following four lines to activate the samples below
# --------- START SECTION TO REMOVE -----------
#*,*,*,*)
# ;;
# ---------- END SECTION TO REMOVE ------------
~中略~
# ASUS WL-100 (ryuton add)
*,*,*,xx:xx:xx:xx:xx:xx)
INFO="ASUS WL-100"
ESSID="xxx"
MODE="auto"
CHANNEL="x"
RATE="auto"
KEY="xxxx-xxxx-xx"
;;
# Generic example (decribe all possible settings)
*,*,*,*)
~後略~
という設定をしました。

・ *,*,*,xx:xx:xx:xx:xx:xx)
のxx:xx:xx:xx:xx:xxは使うカードのMACアドレスです。
無線LANのカードが二枚あったんで実はこのあとにGW-NS11Sカードの設定も書いてます。
まあ複数のカード別に設定を変えるつもりで無ければここは *,*,*,*) にして
全てのカードにマッチさせてもOKかと。

・ ESSID="xxx"
はアクセスポイントに設定したESSIDと同じものを指定します。

・ CHANNEL="x"
にはアクセスポイントにつながるチャンネルを設定。

・ KEY="xxxx-xxxx-xx"
にはWEPのためのキーを書きます。
これを指定すると無線での通信が暗号化されます。
もちろんアクセスポイントに設定したキーと同じものを指定します。

/etc/pcmcia/config-2.4とか/etc/pcmcia/*.confのファイル
これらにカードと使うモジュールの設定があれば何もしなくてもこのままで上手くいくはず。
無かったらカードを挿して
$ /sbin/cardctl ident
とすると
Socket 0:
no product info available
Socket 1:
product info: "ASUS", "802_11b_PC_CARD_25", "Version 01.00", ""
manfid: 0x02aa, 0x0002
function: 6 (network)
などとカードの中から情報がかえってきます。

んで、 /etc/pcmcia/xxx.conf というファイルを作って調べたカードの情報とモジュールの対応を書きました。
(ファイル名は最後が .conf になってれば何でもいいです。デビアンウッディの/etc/pcmcia/config-2.4では最後のほうにそれらを読み込むのが書いてあったので)
/etc/pcmcia/xxx.confの中身は



card "ryuton)ASUS WL-100 802.11b WLAN PC Card"
version "ASUS", "802_11b_PC_CARD_25", "Version 01.00", ""
manfid 0x02aa, 0x0002
bind "orinoco_cs"

card の"ryuton)なんたら"って所は自分で適当に分かりやすいカード名をつけといて下さい。
version や manfid はどちらか一方だけでもいいです。
ここで指定したカードを bind で orinoco_cs.o モジュールに関連づけます。


これで動きます。

$ /etc/init.d/pcmcia restart
とコマンド打ってPCMCIAのサービスを再起動させて、WL-100カードを挿します。
$ lsmod
で見るとちゃんと orinoco_cs.o がロードされてます。
$ iwconfig
と打つと通信中のアクセスポイントのMACアドレスやらリンククオリティやらが出てきます。
無線LAN越しに通信してることを
$ ping xxxx
なんかでチェックしてみると、一応使える様にはなったみたいです。
がしかし、orinoco_cs使うとネットワークがむちゃくちゃ遅い。
むうう...。

$ tail -f /var/log/syslog
でメッセージを見ていると、

kernel: eth0: Tx error, status 4 (FID=xxxx)

のようなエラーが大量に出ています。あららら。
googleでこのエラーメッセージを打ち込んで調べてみると、どうもカードによっては起こる事らしい。
こういう時は linux-wlan-ng のprismドライバのモジュール使えって事らしい...。
ここでWL-100のドライバCDを見てみるとちゃんと linux-wlan-ng 0.1.14 がはいってました。
しおしおしお。(;_;)
機械のマニュアルやドライバCDの中身はちゃんと見ておきましょう...。


### linux-wlan-ng の prism2_cs を使って上手くいった事 ###


linux-wlan-ngの0.2.0のtar.gz落してきて展開してREADMEファイルのとおりにインストールしました。

$make config
(カーネルやpcmcia-csなどのソースコードのパスなどを聞いてきます)
$make all
$make install
っす。
(debian test版の sargeに linux-wlan-ng があるんでそれのソースを入れる手もある)

/etc/network/interfaces
一応eth0の設定を残してインターフェース名 wlan0 のエントリを作りました。


iface wlan0 inet static
address 192.168.xxx.xxx
netmask 255.255.xxx.xxx
network 192.168.xxx.xxx
broadcast 192.168.xxx.xxx
gateway 192.168.xxx.xxx


/etc/pcmcia/xxx.conf(または/etc/pcmcia/config*とか/etc/pcmcia/*.conf)



device "prism2_cs"
class "wlan-ng" module "prism2_cs"
card "ryu)ASUS WL-100 802.11b WLAN PC Card"
version "ASUS", "802_11b_PC_CARD_25", "Version 01.00", ""
manfid 0x02aa, 0x0002
bind "prism2_cs"
# bind "orinoco_cs"

wl-100に prism2_cs モジュールを使うように修正。
device には prism2_cs を使う時に/etc/pcmcia/の wlan-ng スクリプトが走るような設定いれときました。
/etc/pcmcia/wlan-ng.conf とかに同じ manfid や version の行があったら
有難くそれを使うか、参考にしてコメントアウトとするかです。
今回は色々実験しながらなのでコメントアウトにしときました。

/etc/wlan/
以下ににlinux-wlan-ngの設定を書きます。linux-wlan-ngのREADMEにあるとおり。
/etc/wlan/wlan.conf
にESSのIDを書きます。最後の方に

SSID_wlan0="YourESSID"
ENABLE_wlan0=y


とYourESSIDの所にアクセスポイントと同じESSIDを書きます。
でサンプルのwlancfg-DEFAULTファイルをwlancfg-YourESSIDとしてコピーして、
/etc/wlan/wlancfg-YourESSID
というようなファイルを作って、設定を書きます。WEPの指定も入れてこんな感じです。


#=======USER MIB SETTINGS=============================
# You can add the assignments for various MIB items
# of your choosing to this variable, separated by
# whitespace. The wlan-ng script will then set each one.
# Just uncomment the variable and set the assignments
# the way you want them.
#USER_MIBS="p2CnfRoamingMode=1 p2CnfShortPreamble=mixed"
#=======WEP===========================================
# [Dis/En]able WEP. Settings only matter if PrivacyInvoked is true
lnxreq_hostWEPEncrypt=false # true|false
lnxreq_hostWEPDecrypt=fales # true|false
dot11PrivacyInvoked=true # true|false
dot11WEPDefaultKeyID=0 # 0|1|2|3
dot11ExcludeUnencrypted=true # in AP this means WEP is required.
# If PRIV_GENSTR is not empty, use PRIV_GENTSTR to generate
# keys (just a convenience)
PRIV_GENERATOR=/sbin/nwepgen # nwepgen, Neesus compatible
PRIV_KEY128=false # keylength to generate
PRIV_GENSTR=""
# or set them explicitly. Set genstr or keys, not both.
dot11WEPDefaultKey0=xx:xx:xx:xx:xx # format: xx:xx:xx:xx:xx or
#dot11WEPDefaultKey1= # xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
#dot11WEPDefaultKey2= # e.g. 01:20:03:40:05 or
#dot11WEPDefaultKey3= # 01:02:03:04:05:06:07:08:09:0a:0b:0c:0d
#=======SELECT STATION MODE===================
IS_ADHOC=n # y|n, y - adhoc, n - infrastructure
#======= INFRASTRUCTURE STATION ===================
# What kind of authentication?
AuthType="opensystem" # opensystem | sharedkey (requires WEP)
#======= ADHOC STATION ============================
BCNINT=100 # Beacon interval (in Kus)
CHANNEL=x # DS channel for BSS (1-14, depends
# on regulatory domain)
BASICRATES="2 4" # Rates for mgmt&ctl frames (in 500Kb/s)
OPRATES="2 4 11 22" # Supported rates in BSS (in 500Kb/s)
・ dot11WEPDefaultKey0=xx:xx:xx:xx:xx
にはアクセスポイントと同じ暗号キーを書きます。

・ CHANNEL=x
にはアクセスポイントと通信するチャンネルを指定。


これで

$ /etc/init.d/pcmcia restart

として WL-100カード を挿せばアクセスポイントと通信できるはずです。
が実は、ここでprism2_csモジュールをロードしようとしてエラーが出ました。

CardServices release does not match!

orinoco_cs.oを作った時にカーネル同梱のとpcmcia-csのとがダブってできてしまったのが原因か?
ちょっとタバコで一服して、「えーい面倒だ!」
linux-wlan-ngのソースコードのうちの prism2sta.c のその部分のエラーチェックを

if ( serv.Revision != CS_RELEASE_CODE )
{
printk(KERN_NOTICE"%s: CardServices release does not match!n", dev_info);
/*this line ryuton remove
return -1;
*/
}

とエラー終了するところをコメントアウトしてしのぎました。
危険なのでお勧めはしません。

本当はカーネルコンパイルの時にカードサービスがダブらない方法を探した方がいいとは思うんですが、コンフィグでpcmciaをNにするとmake-kpkgでモジュール作る時にpcmciaのモジュールが出来なかった。
むういまいち調べがつかん。今度はちゃんとしよう。(^_^;;

こんどはちゃんと動きました。
さてこれでキッチンに置いてあるノートから線が一つ無くなりました。(^-~)
ま馬鹿といえば馬鹿ですね...。

ちょうどその頃にスラシュドットjpの記事SWSUSPを知りました。いいなぁこれ。時間があったら試してみたい...むうう時間があったらね(;_;)

ホント長くてごめん。m(-_-)m


2003/07/29


© Rakuten Group, Inc.